上回介紹閉包概念以及閉包大致運用,這次則介紹實做比較常用閉包的幾種模式
上個章節有介紹到,使用不同變數可以讓閉包儲存的記憶體分開,在透過不同參數可以達成需要重複運行,卻需要不同值做呈現、運算的部分,比如下面範例。
function interview(name,office){
return function(){
return console.log(`我的名字是 ${name},我是來應徵 ${office}`)
}
}
const Ryder = interview('Ryder','前端工程師')
Ryder() // 我的名字是Ryder,我是來應徵 前端工程師
const Jason = interview('Jason','專案經理')
Jason() //我的名字是Jason,我是來應徵 專案經理
const Emma = interview('Emma','品管工程師')
Emma() //我的名字是 Emma,我是來 品管工程師
上一章節也有提到,最簡單的閉包就是在函示中 return
一個函示,而私有方法 則是 return
出一個物件,再將各種函示包在物件中,這樣就可以呼叫物件中各式不同的方法,以達成實做時的各種需求,並且和工廠模式相同,使用不同變數、常數閉包儲存的記憶體也會不同,因此可以透過不同參數達成各自獨立計算的需求。
function buyGame(initValue){
let money = initValue||0
return {
buyNS(){
money = money - 9000
},
buyPS5(){
money = money - 15000
},
remainMoney(){
return money
}
}
}
const Ryder = buyGame(30000)
Ryder.buyNS()
Ryder.buyNS()
console.log(Ryder.remainMoney()) //Ryder 買了兩台 NS 剩 12000
const Emma = buyGame(50000)
Emma.buyNS()
Emma.buyPS5()
console.log(Emma.remainMoney()) //Emma 買了一台 NS 一台 PS5 剩下26000
P.S 這邊的 buyNS()
、 buyPS5()
是使用物件函式縮寫,未縮寫前是 buyNS:fuction()
、 buyPS5: function()